home *** CD-ROM | disk | FTP | other *** search
- ⓪ IMPLEMENTATION MODULE Text; (* V#107 *)⓪ (*$L-,R-,Y+,N+*)⓪ ⓪ (*⓪"18.7.87: Read setzt ch auf 0C bei Fehlern⓪"22.7.87: ReadString terminiert bei Ctrl-Zeichen⓪"15.9.87: Read/Write auf Units über Treiberroutinen⓪"10.12.87: ReadString gibt CR/LF bei Eingabe v. CR o. LF aus⓪"03.01.88: Assembler-Version⓪"17.01.88: ReadBin neu, GetLast optimiert⓪"07.07.89: UndoRead wirkt auch auf ReadString⓪"04.08.89: Read/ReadBin/ReadString lesen bei 'readSeqTxt' nun viel schneller,⓪,weil ein interner Puffer verwendet wird.⓪"18.02.90: ReadBin liest Char nun im Seq-Mode, Read im Direct-Mode richtig⓪"17.12.90: ReadToken/ReadFromLine und TermCH implementiert⓪"31.01.91: ReadToken funktioniert nun auch auf Disk-Files⓪ *)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, LONGWORD, ADDRESS, WORD;⓪ ⓪ FROM FileBase IMPORT Unit, UDataProc, UCloseProc, UFlushProc, URStrProc,⓪(UWStrProc, UGChrProc;⓪ ⓪ FROM Files IMPORT File, @CheckState, EOF, Access;⓪ ⓪ FROM MOSGlobals IMPORT fInternalErr2, fEndOfFile, fBadAccess, fDoubleUndo,⓪(fDiskFull, fBadOp;⓪ ⓪ FROM MOSConfig IMPORT Separators;⓪ ⓪ (*$I FileDesc.Icl *)⓪ ⓪ (*$O+*)⓪ TYPE File = POINTER TO FileDesc;⓪ (*$O-*)⓪ ⓪ ⓪ PROCEDURE ErrHandler;⓪"BEGIN⓪$ASSEMBLER⓪(; File in A0⓪(MOVE.L A0,(A3)+⓪(JMP @CheckState⓪$END⓪"END ErrHandler;⓪ ⓪ PROCEDURE ErrHdl2;⓪"BEGIN⓪$ASSEMBLER⓪(SUBQ.L #2,A3⓪(MOVE.L A0,D0⓪(BEQ T0⓪(CLR.W File.state(A0)⓪%T0⓪$END⓪"END ErrHdl2;⓪ ⓪ PROCEDURE EOL (f: File): BOOLEAN;⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.L -(A3),D0⓪(BEQ TR⓪(MOVE.L D0,A0⓪(CMPI #readSeqTxt,File.accmode(A0)⓪(BEQ T0⓪(MOVE #fBadOp,File.state(A0)⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪%TR MOVE #1,(A3)+⓪(RTS⓪%T0 TST File.eol(A0)⓪(BNE TR⓪(MOVE.L A0,(A3)+⓪(JMP EOF⓪$END⓪"END EOL;⓪ ⓪ ⓪ PROCEDURE reloadBuffer ();⓪"BEGIN⓪$ASSEMBLER⓪(; IN: A0:f⓪(; RET: D0.W:state⓪ ⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L File.buffer(A0),-(A7)⓪(MOVEQ #0,D0⓪(MOVE.W File.bufsize(A0),D0⓪(MOVE.L D0,-(A7)⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$3F,-(A7)⓪(TRAP #1⓪(ADDA.W #12,A7⓪(MOVEM.L (A7)+,A0/A1⓪(TST.L D0⓪(BMI error⓪(⓪(MOVE.W D0,File.bufsize(A0)⓪(CLR.W File.bufpos(A0)⓪(; !!! was ist, wenn Null Zeichen gelesen wurden - wird solch ein⓪(; EOF schon vorher erkannt?⓪(CLR D0⓪ ⓪&error⓪$END⓪"END reloadBuffer;⓪ ⓪ PROCEDURE getBufChar ();⓪"BEGIN⓪$ASSEMBLER⓪(; IN: A0:f⓪ ⓪(MOVE.W File.bufpos(A0),D0⓪(CMP.W File.bufsize(A0),D0⓪(BNE cont⓪(JSR reloadBuffer⓪(BNE error ; D0.W enthält neg. Fehlercode⓪&cont⓪(MOVE.L File.buffer(A0),A2⓪(MOVE.B 0(A2,D0.W),D0⓪(ADDQ #1,File.bufpos(A0)⓪&error⓪$END⓪"END getBufChar;⓪ ⓪ ⓪ PROCEDURE Read0 (VAR c:CHAR;f:File): BOOLEAN; (* TRUE = Zeichen gültig *)⓪"(*⓪#* state # 0 ? --> Err / FALSE⓪#* eof ? --> Err / FALSE⓪#* pos = len ? --> binarymode ? --> ja: Err / FALSE; nein: FALSE⓪#* readerror ? --> FALSE⓪#* sonst TRUE⓪#*)⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c, D1 liefert BOOLEAN⓪(⓪(TST File.state(A0)⓪(BMI.L errerr⓪(⓪(TST File.eof(A0)⓪(BNE.L erreof⓪(⓪(TST File.eol(A0)⓪(BEQ again⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L A0,(A3)+⓪(JSR ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(TST File.ondisk(A0)⓪(BEQ isunit⓪ ⓪(; von Disk lesen⓪(MOVE.L File.pos(A0),D0⓪(CMP.L File.len(A0),D0⓪(BCC.L eof⓪ ⓪(MOVE.B File.lastch(A0),-(A7)⓪ ⓪(TST.L File.buffer(A0)⓪(BNE bufRead⓪ ⓪(MOVEM.L A0/A1,-(A7)⓪(PEA File.lastch(A0)⓪(MOVEQ #1,D0⓪(MOVE.L D0,-(A7)⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$3F,-(A7)⓪(TRAP #1⓪(ADDA.W #12,A7⓪(MOVEM.L (A7)+,A0/A1⓪(TST.L D0⓪(BMI err2⓪(MOVE.B File.lastch(A0),D0⓪(BRA.W diskok⓪ ⓪&bufRead⓪(JSR getBufChar ; Char in D0⓪(TST.W D0⓪(BPL readok⓪ ⓪&err2⓪(MOVE.B (A7)+,File.lastch(A0)⓪(MOVE D0,File.state(A0)⓪(MOVEQ #0,D1 ; non-fatal error, Zeichen ungültig⓪(CLR.B (A1) ; ch:= 0C⓪(BRA.L end⓪ ⓪&isunit⓪(MOVE.B File.lastch(A0),-(A7)⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L File.uhandle(A0),(A3)+⓪(MOVE.L File.urdchr(A0),A0⓪(JSR (A0)⓪(MOVEM.L (A7)+,A0/A1⓪(MOVE -(A3),D0⓪(BMI err2⓪(MOVE.B D0,File.lastch(A0)⓪(BRA ok⓪$⓪'erreof⓪(MOVE #fEndOfFile,D0⓪'err⓪(MOVE D0,File.state(A0)⓪'errerr⓪(; ------------------ fatal error --------------⓪(MOVE.L A0,(A3)+⓪(CLR.B (A1) ; ch:= 0C⓪(MOVEM.L A0/A1,-(A7)⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(MOVEM.L (A7)+,A0/A1⓪(CLR (A3)+ ; Abbruch⓪(RTS⓪ ⓪'errint2⓪(MOVE #fInternalErr2,D0⓪(BRA err⓪(⓪'eof⓪(BHI errint2⓪(CMPI #2,File.accmode(A0) ; BINARY MODE ?⓪(BLS erreof ; Ja, dann schon Error⓪(MOVE #1,File.eof(A0) ; sonst erstmal nur Flag setzen⓪(MOVE #2,File.state(A0)⓪(CLR D0⓪(MOVEQ #0,D1 ; Zeichen ungültig⓪(BRA ok2⓪(⓪'readok⓪(MOVE.B D0,File.lastch(A0)⓪'diskok⓪(ADDQ.L #1,File.pos(A0) ; Zeichen gelesen, also pos erhöhen⓪H; (wird bei Units sowieso ignoriert)⓪(CLR D1 ; kommt gleich nach File.state...⓪ ⓪'ok⓪(MOVE D1,File.state(A0)⓪(ADDQ.L #2,A7 ;MOVE.B (A7)+,File.prevch(A0)⓪(MOVEQ #1,D1 ; Zeichen gültig⓪(CMPI #2,File.accmode(A0) ; Binärmodus ?⓪(BLS ok2 ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B #13,D0⓪(BEQ eol⓪(CMPI.B #10,D0⓪(BNE ok0⓪(TST File.skipLF(A0)⓪(BEQ eol⓪(CLR File.skipLF(A0)⓪(BRA again⓪'eol⓪(MOVE #1,File.eol(A0) ; lastch wird das EOL-Zeichen enthalten⓪(MOVE #1,File.state(A0)⓪(MOVEQ #0,D1 ; Zeichen ungültig⓪(CLR D0⓪(⓪'ok0⓪(TST File.chkeof(A0)⓪(BEQ ok2 ; Kein EOF-Test⓪(CMP.B File.eofchr(A0),D0⓪(BNE ok2⓪(MOVE #1,File.eof(A0)⓪(MOVE #2,File.state(A0)⓪(MOVEQ #0,D1 ; Zeichen ungültig⓪(CLR D0⓪(⓪'ok2⓪(MOVE.B D0,(A1)⓪(⓪'end⓪$END⓪"END Read0;⓪ ⓪ ⓪ PROCEDURE Read0Bin (VAR c:CHAR;f:File): BOOLEAN; (* TRUE = Zeichen gültig *)⓪"(*⓪#* state # 0 ? --> Err / FALSE⓪#* eof ? --> Err / FALSE⓪#* pos = len ? --> binarymode ? --> ja: Err / FALSE; nein: FALSE⓪#* readerror ? --> FALSE⓪#* sonst TRUE⓪#*)⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c, D1 liefert BOOLEAN⓪(⓪(TST File.state(A0)⓪(BMI.L errerr⓪(⓪(TST File.eof(A0)⓪(BNE.L erreof⓪(⓪(TST File.ondisk(A0)⓪(BEQ isunit⓪(⓪(MOVE.L File.pos(A0),D0⓪(CMP.L File.len(A0),D0⓪(BCC.L eof⓪ ⓪(MOVE.B File.lastch(A0),-(A7)⓪ ⓪(TST.L File.buffer(A0)⓪(BNE bufRead⓪ ⓪(MOVEM.L A0/A1,-(A7)⓪(PEA File.lastch(A0)⓪(MOVEQ #1,D0⓪(MOVE.L D0,-(A7)⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$3F,-(A7)⓪(TRAP #1⓪(ADDA.W #12,A7⓪(MOVEM.L (A7)+,A0/A1⓪(TST.L D0⓪(BMI err2⓪(MOVE.B File.lastch(A0),D0⓪(BRA.W diskok⓪ ⓪&bufRead⓪(JSR getBufChar ; Char in D0⓪(TST.W D0⓪(BPL readok⓪ ⓪&err2⓪(MOVE.B (A7)+,File.lastch(A0)⓪(MOVE D0,File.state(A0)⓪(MOVEQ #0,D1 ; non-fatal error, Zeichen ungültig⓪(CLR.B (A1) ; ch:= 0C⓪(BRA.L end⓪$⓪&isunit⓪(MOVE.B File.lastch(A0),-(A7)⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L File.uhandle(A0),(A3)+⓪(MOVE.L File.urdchr(A0),A0⓪(JSR (A0)⓪(MOVEM.L (A7)+,A0/A1⓪(MOVE -(A3),D0⓪(BMI err2⓪(MOVE.B D0,File.lastch(A0)⓪(BRA ok⓪$⓪'erreof⓪(MOVE #fEndOfFile,D0⓪'err⓪(MOVE D0,File.state(A0)⓪'errerr⓪(; ------------------ fatal error --------------⓪(MOVE.L A0,(A3)+⓪(CLR.B (A1) ; ch:= 0C⓪(MOVEM.L A0/A1,-(A7)⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(MOVEM.L (A7)+,A0/A1⓪(CLR (A3)+ ; Abbruch⓪(RTS⓪(⓪'errint2⓪(MOVE #fInternalErr2,D0⓪(BRA err⓪(⓪'eof⓪(BHI errint2⓪(CMPI #2,File.accmode(A0) ; BINARY MODE ?⓪(BLS erreof ; Ja, dann schon Error⓪(MOVE #1,File.eof(A0) ; sonst erstmal nur Flag setzen⓪(MOVE #2,File.state(A0)⓪(CLR D0⓪(MOVEQ #0,D1 ; Zeichen ungültig⓪(BRA ok2⓪(⓪'readok⓪(MOVE.B D0,File.lastch(A0)⓪'diskok⓪(CLR D1⓪(ADDQ.L #1,File.pos(A0) ; Zeichen gelesen, also pos erhöhen⓪H; (wird bei Units sowieso ignoriert)⓪'ok⓪(MOVE D1,File.state(A0)⓪(ADDQ.L #2,A7 ;MOVE.B (A7)+,File.prevch(A0)⓪(MOVEQ #1,D1 ; Zeichen gültig⓪(⓪(CMPI #2,File.accmode(A0) ; Binärmodus ?⓪(BLS ok2 ; ja-> kein EOF-Test⓪(⓪(CLR File.eol(A0)⓪(⓪(TST File.chkeof(A0)⓪(BEQ ok2 ; Kein EOF-Test⓪(CMP.B File.eofchr(A0),D0⓪(BNE ok2⓪(MOVE #1,File.eof(A0)⓪(MOVE #2,File.state(A0)⓪H; Zeichen bleibt gültig⓪(⓪'ok2⓪(MOVE.B D0,(A1)⓪(⓪'end⓪$END⓪"END Read0Bin;⓪ ⓪ ⓪ PROCEDURE GetLast (VAR c:CHAR;f:File);⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c⓪(⓪(CMPI #2,File.accmode(A0)⓪(BLS noget ; Bei Binärmodus nur Flag löschen⓪(MOVE.B File.lastch(A0),D0⓪(CMPI.B #13,D0⓪(BEQ eol⓪(CMPI.B #10,D0⓪(BNE ok⓪&eol⓪(MOVE #1,File.eol(A0)⓪(MOVE #1,File.state(A0)⓪(CLR D0⓪(BRA ok2⓪&ok⓪(TST File.chkeof(A0)⓪(BEQ ok2 ; Kein EOF-Test⓪(CMP.B File.eofchr(A0),D0⓪(BNE ok2⓪(MOVE #1,File.eof(A0)⓪(MOVE #2,File.state(A0)⓪(CLR D0⓪&ok2⓪(MOVE.B D0,(A1)⓪&noget⓪(CLR File.getlast(A0)⓪$END⓪"END GetLast;⓪ ⓪ ⓪ PROCEDURE GetLastBin (VAR c:CHAR;f:File);⓪"BEGIN⓪$ASSEMBLER⓪(; A0: f, A1: c⓪(⓪(CMPI #2,File.accmode(A0)⓪(BLS noget ; Bei Binärmodus nur Flag löschen⓪(MOVE.B File.lastch(A0),D0⓪(TST File.chkeof(A0)⓪(BEQ ok2 ; Kein EOF-Test⓪(CMP.B File.eofchr(A0),D0⓪(BNE ok2⓪(MOVE #1,File.eof(A0)⓪(MOVE #2,File.state(A0)⓪&ok2⓪(MOVE.B D0,(A1)⓪&noget⓪(CLR File.getlast(A0)⓪$END⓪"END GetLastBin;⓪ ⓪ ⓪ PROCEDURE wr (f:File;c:CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(; c IN D0, f in A0; A1 nicht zerstören⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.B D0,-(A7)⓪(MOVE.L File.uhandle(A0),(A3)+⓪(MOVE.L A7,(A3)+⓪(MOVEQ #1,D0⓪(MOVE.L D0,-(A7)⓪(MOVE.L A7,(A3)+⓪(MOVE.L File.uwrite(A0),A0⓪(JSR (A0)⓪(ADDQ.L #6,A7⓪(MOVEM.L (A7)+,A0/A1⓪(MOVE -(A3),File.state(A0)⓪$END⓪"END wr;⓪"⓪ ⓪ PROCEDURE Read (f: File; VAR ch: CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -(A3),A1⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ E1⓪(TST File.getlast(A0)⓪(BEQ T0⓪(JSR GetLast⓪(BRA E0⓪%T0 JSR Read0⓪(BRA E0⓪%E1 CLR.B (A1)⓪%E0 UNLK A5⓪$END;⓪"END Read;⓪ ⓪ ⓪ PROCEDURE ReadBin (f: File; VAR ch: CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -(A3),A1⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ E1⓪(TST File.getlast(A0)⓪(BEQ T0⓪(JSR GetLastBin⓪(BRA E0⓪%T0 JSR Read0Bin⓪(BRA E0⓪%E1 CLR.B (A1)⓪%E0 UNLK A5⓪$END;⓪"END ReadBin;⓪ ⓪ ⓪ PROCEDURE UndoRead (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -4(A3),(A3)+⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ E1⓪(MOVE.L -(A3),A0⓪(TST File.getlast(A0)⓪(BEQ T0⓪(MOVE #fDoubleUndo,File.state(A0)⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(UNLK A5⓪(RTS⓪%T0 CMPI #3,File.accmode(A0)⓪(BCC T1⓪(⓪(MOVE.L A0,-(A7)⓪(MOVE.W #1,-(A7)⓪(MOVE.W File.handle(A0),-(A7)⓪(MOVEQ #-1,D0⓪(MOVE.L D0,-(A7)⓪(MOVE #$42,-(A7)⓪(TRAP #1⓪(ADDA.W #10,A7⓪(MOVE.L (A7)+,A0⓪(TST.L D0⓪(BPL.L noErr⓪(MOVE D0,File.state(A0)⓪(UNLK A5⓪(RTS⓪&noErr:⓪(MOVE.L D0,File.pos(A0)⓪(⓪%T1 CLR File.eof(A0)⓪(CLR File.eol(A0)⓪(ADDQ.W #1,File.getlast(A0)⓪(UNLK A5⓪(RTS⓪%E1 SUBQ.L #4,A3⓪(UNLK A5⓪$END⓪"END UndoRead;⓪ ⓪ ⓪ PROCEDURE diskRead;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪(BRA diskLoop⓪ ⓪%err2⓪(MOVE D0,File.state(A0) ; non-fatal error⓪(⓪%E0 RTS⓪(⓪%nfeof⓪(MOVE #1,File.eof(A0)⓪(MOVE #2,File.state(A0)⓪(RTS⓪(⓪%eof⓪(BHI errint2⓪(CMPI #2,File.accmode(A0) ; BINARY MODE ?⓪(BHI.L nfeof⓪%erreof⓪(MOVE #fEndOfFile,D0⓪%err⓪(MOVE D0,File.state(A0)⓪%errerr⓪(MOVE.L A0,(A3)+⓪(JSR ErrHandler ; fatal error⓪(JMP ErrHdl2⓪(⓪%errint2⓪(MOVE #fInternalErr2,D0⓪(BRA err⓪(⓪%diskLoop:⓪(MOVE 4(A7),D0⓪(CMP 6(A7),D0 ; index > HIGH (str) ?⓪(BHI E0 ; dann ist String voll⓪(⓪(TST File.state(A0)⓪(BMI errerr⓪(⓪(TST File.eof(A0)⓪(BNE erreof⓪(⓪(TST File.eol(A0)⓪(BEQ again⓪(⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L A0,(A3)+⓪(JSR ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(MOVE.L File.pos(A0),D0⓪(CMP.L File.len(A0),D0⓪(BCC eof⓪(⓪(TST.L File.buffer(A0)⓪(BEQ singleRead⓪ ⓪(JSR getBufChar⓪(TST.W D0⓪(BMI err2⓪(MOVE.B D0,(A1)⓪(BRA diskok⓪ ⓪&singleRead⓪(MOVE.L A0,-(A7) ; f retten⓪(MOVE.L A1,-(A7) ; ADR(str) als Read-Adr⓪(MOVEQ #1,D0⓪(MOVE.L D0,-(A7)⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$3F,-(A7)⓪(TRAP #1⓪(ADDQ.L #8,A7⓪(MOVE.L (A7)+,A1⓪(MOVE.L (A7)+,A0⓪(TST.L D0⓪(BMI err2⓪ ⓪(MOVE.B (A1),D0⓪ ⓪&diskok⓪(CLR File.state(A0)⓪(ADDQ.L #1,File.pos(A0)⓪(MOVE.B D0,File.lastch(A0)⓪(⓪(CMPI #2,File.accmode(A0) ; Binärmodus ?⓪(BLS valid ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B #13,D0⓪(BEQ eol⓪(CMPI.B #10,D0⓪(BNE ok0⓪(TST File.skipLF(A0)⓪(BEQ eol⓪(CLR File.skipLF(A0)⓪(BRA again⓪'eol⓪(MOVEQ #1,D0⓪(MOVE D0,File.eol(A0) ; lastch wird das EOL-Zeichen enthalten⓪(MOVE D0,File.state(A0)⓪(RTS⓪(⓪'doBS⓪(TST 4(A7)⓪(BEQ diskLoop⓪(SUBQ #1,4(A7)⓪(SUBQ #1,A1⓪(BRA diskLoop⓪(⓪'ok0⓪(TST File.chkeof(A0)⓪(BEQ valid ; Kein EOF-Test⓪(CMP.B File.eofchr(A0),D0⓪(BEQ nfeof⓪(⓪&valid⓪(CMPI.B #8,D0 ; Backspace ?⓪(BEQ doBS⓪(ADDQ #1,4(A7) ; index⓪(ADDQ.L #1,A1⓪(CMPI.B #' ',D0⓪(BCC diskLoop⓪(; Ende bei Ctrl-Zeichen⓪$END;⓪"END diskRead;⓪ ⓪ PROCEDURE unitRead;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪%loop⓪(MOVE 4(A7),D0⓪(CMP 6(A7),D0 ; index > HIGH (str) ?⓪(BHI E0 ; dann ist String voll⓪(⓪(JSR Read0⓪(TST D1⓪(BEQ E0⓪(⓪(MOVE.B (A1),D0⓪(CMPI.B #8,D0⓪(BEQ DOBS⓪(CMPI.B #' ',D0⓪(BCS E0⓪&NORM⓪(ADDQ.L #1,A1⓪(ADDQ #1,4(A7)⓪(BRA loop⓪&DOBS⓪(TST 4(A7)⓪(BEQ loop⓪(SUBQ.L #1,A1⓪(SUBQ #1,4(A7)⓪(BRA loop⓪%E0⓪$END⓪"END unitRead;⓪ ⓪ PROCEDURE ReadString (f: File; VAR str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -10(A3),(A3)+⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ E1⓪(⓪(MOVE.W -(A3),-(A7) ; HIGH(str)⓪(MOVE.L -(A3),A1 ; str⓪(MOVE.L -(A3),A0 ; f⓪(⓪(TST File.eof(A0)⓪(BEQ noeof⓪(⓪(CLR.B (A1)⓪(MOVE #fEndOfFile,File.state(A0)⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(UNLK A5⓪(RTS⓪(⓪%E1 SUBQ.L #2,A3⓪(MOVE.L -(A3),A0⓪(CLR.B (A0)⓪(SUBQ.L #4,A3⓪(UNLK A5⓪(RTS⓪(⓪%noeof:⓪(CLR -(A7) ; index⓪(⓪(TST File.getlast(A0)⓪(BEQ noLast⓪(JSR GetLast⓪(ADDQ.W #1,(A7) ; INC (index)⓪(ADDQ.L #1,A1⓪%noLast:⓪ ⓪(TST File.ondisk(A0)⓪(BEQ isunit⓪(⓪(JSR diskRead⓪(BRA E0⓪(⓪%isunit⓪(JSR unitRead⓪(⓪%E0 ; String mit Null abschließen⓪(MOVE (A7)+,D0 ; index⓪(MOVE (A7)+,D1 ; HIGH⓪(CMP D1,D0⓪(BHI E2⓪(CLR.B (A1)⓪%E2 UNLK A5⓪$END⓪"END ReadString;⓪ ⓪ ⓪ PROCEDURE diskReadFrom;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪(BRA diskLoop⓪ ⓪%err2⓪(MOVE D0,File.state(A0) ; non-fatal error⓪(⓪%E0 RTS⓪(⓪%nfeof⓪(MOVE #1,File.eof(A0)⓪(MOVE #2,File.state(A0)⓪(RTS⓪(⓪%eof⓪(BHI errint2⓪(CMPI #2,File.accmode(A0) ; BINARY MODE ?⓪(BHI.L nfeof⓪%erreof⓪(MOVE #fEndOfFile,D0⓪%err⓪(MOVE D0,File.state(A0)⓪%errerr⓪(MOVE.L A0,(A3)+⓪(JSR ErrHandler ; fatal error⓪(JMP ErrHdl2⓪(⓪%errint2⓪(MOVE #fInternalErr2,D0⓪(BRA err⓪(⓪%diskLoop:⓪(MOVE 4(A7),D0⓪(CMP 6(A7),D0 ; index > HIGH (str) ?⓪(BHI E0 ; dann ist String voll⓪(⓪(TST File.state(A0)⓪(BMI errerr⓪(⓪(TST File.eof(A0)⓪(BNE erreof⓪(⓪(TST File.eol(A0)⓪(BEQ again⓪(⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L A0,(A3)+⓪(JSR ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(MOVE.L File.pos(A0),D0⓪(CMP.L File.len(A0),D0⓪(BCC eof⓪(⓪(TST.L File.buffer(A0)⓪(BEQ singleRead⓪ ⓪(JSR getBufChar⓪(TST.W D0⓪(BMI err2⓪(MOVE.B D0,(A1)⓪(BRA diskok⓪ ⓪&singleRead⓪(MOVE.L A0,-(A7) ; f retten⓪(MOVE.L A1,-(A7) ; ADR(str) als Read-Adr⓪(MOVEQ #1,D0⓪(MOVE.L D0,-(A7)⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$3F,-(A7)⓪(TRAP #1⓪(ADDQ.L #8,A7⓪(MOVE.L (A7)+,A1⓪(MOVE.L (A7)+,A0⓪(TST.L D0⓪(BMI err2⓪ ⓪(MOVE.B (A1),D0⓪ ⓪&diskok⓪(CLR File.state(A0)⓪(ADDQ.L #1,File.pos(A0)⓪(MOVE.B D0,File.lastch(A0)⓪(⓪(CMPI #2,File.accmode(A0) ; Binärmodus ?⓪(BLS valid ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B #13,D0⓪(BEQ eol⓪(CMPI.B #10,D0⓪(BNE ok0⓪(TST File.skipLF(A0)⓪(BEQ eol⓪(CLR File.skipLF(A0)⓪(BRA again⓪'eol⓪(MOVEQ #1,D0⓪(MOVE D0,File.eol(A0) ; lastch wird das EOL-Zeichen enthalten⓪(MOVE D0,File.state(A0)⓪(RTS⓪(⓪'doBS⓪(TST 4(A7)⓪(BEQ diskLoop⓪(SUBQ #1,4(A7)⓪(SUBQ #1,A1⓪(BRA diskLoop⓪(⓪'ok0⓪(TST File.chkeof(A0)⓪(BEQ valid ; Kein EOF-Test⓪(CMP.B File.eofchr(A0),D0⓪(BEQ nfeof⓪(⓪&valid⓪(CMPI.B #8,D0 ; Backspace ?⓪(BEQ doBS⓪(ADDQ #1,4(A7) ; index⓪(ADDQ.L #1,A1⓪(BRA diskLoop⓪$END;⓪"END diskReadFrom;⓪ ⓪ PROCEDURE unitReadFrom;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören !⓪%loop⓪(MOVE 4(A7),D0⓪(CMP 6(A7),D0 ; index > HIGH (str) ?⓪(BHI E0 ; dann ist String voll⓪(⓪(JSR Read0⓪(TST D1⓪(BEQ E0⓪(⓪(MOVE.B (A1),D0⓪(CMPI.B #8,D0⓪(BEQ DOBS⓪(ADDQ.L #1,A1⓪(ADDQ #1,4(A7)⓪(BRA loop⓪&DOBS⓪(TST 4(A7)⓪(BEQ loop⓪(SUBQ.L #1,A1⓪(SUBQ #1,4(A7)⓪(BRA loop⓪%E0⓪$END⓪"END unitReadFrom;⓪ ⓪ PROCEDURE ReadFromLine (f: File; VAR str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -10(A3),(A3)+⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ E1⓪(⓪(MOVE.W -(A3),-(A7) ; HIGH(str)⓪(MOVE.L -(A3),A1 ; str⓪(MOVE.L -(A3),A0 ; f⓪(⓪(TST File.eof(A0)⓪(BEQ noeof⓪(⓪(CLR.B (A1)⓪(MOVE #fEndOfFile,File.state(A0)⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(UNLK A5⓪(RTS⓪(⓪%E1 SUBQ.L #2,A3⓪(MOVE.L -(A3),A0⓪(CLR.B (A0)⓪(SUBQ.L #4,A3⓪(UNLK A5⓪(RTS⓪(⓪%noeof:⓪(CLR -(A7) ; index⓪(⓪(TST File.getlast(A0)⓪(BEQ noLast⓪(JSR GetLast⓪(ADDQ.W #1,(A7) ; INC (index)⓪(ADDQ.L #1,A1⓪%noLast:⓪ ⓪(TST File.ondisk(A0)⓪(BEQ isunit⓪(⓪(JSR diskReadFrom⓪(BRA E0⓪(⓪%isunit⓪(JSR unitReadFrom⓪(⓪%E0 ; String mit Null abschließen⓪(MOVE (A7)+,D0 ; index⓪(MOVE (A7)+,D1 ; HIGH⓪(CMP D1,D0⓪(BHI E2⓪(CLR.B (A1)⓪%E2 UNLK A5⓪$END⓪"END ReadFromLine;⓪ ⓪ ⓪ PROCEDURE diskReadToken;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören!⓪(BRA diskLoop⓪ ⓪%err2⓪(MOVE D0,File.state(A0) ; non-fatal error⓪(⓪%E0 RTS⓪(⓪%nfeof⓪(MOVE #1,File.eof(A0)⓪(MOVE #2,File.state(A0)⓪(RTS⓪(⓪%eof⓪(BHI errint2⓪(CMPI #2,File.accmode(A0) ; BINARY MODE ?⓪(BHI.L nfeof⓪%erreof⓪(MOVE #fEndOfFile,D0⓪%err⓪(MOVE D0,File.state(A0)⓪%errerr⓪(MOVE.L A0,(A3)+⓪(JSR ErrHandler ; fatal error⓪(JMP ErrHdl2⓪(⓪%errint2⓪(MOVE #fInternalErr2,D0⓪(BRA err⓪(⓪%diskLoop:⓪(MOVE 6(A7),D0⓪(CMP 8(A7),D0 ; index > HIGH (str)?⓪(BHI E0 ; dann ist String voll⓪(⓪(TST File.state(A0)⓪(BMI errerr⓪(⓪(TST File.eof(A0)⓪(BNE erreof⓪(⓪(TST File.eol(A0)⓪(BEQ again⓪(⓪(MOVEM.L A0/A1,-(A7)⓪(MOVE.L A0,(A3)+⓪(JSR ReadLn⓪(MOVEM.L (A7)+,A0/A1⓪(⓪&again⓪(MOVE.L File.pos(A0),D0⓪(CMP.L File.len(A0),D0⓪(BCC eof⓪(⓪(TST.L File.buffer(A0)⓪(BEQ singleRead⓪ ⓪(JSR getBufChar⓪(TST.W D0⓪(BMI err2⓪(MOVE.B D0,(A1)⓪(BRA diskok⓪ ⓪&singleRead⓪(MOVE.L A0,-(A7) ; f retten⓪(MOVE.L A1,-(A7) ; ADR(str) als Read-Adr⓪(MOVEQ #1,D0⓪(MOVE.L D0,-(A7)⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$3F,-(A7)⓪(TRAP #1⓪(ADDQ.L #8,A7⓪(MOVE.L (A7)+,A1⓪(MOVE.L (A7)+,A0⓪(TST.L D0⓪(BMI err2⓪ ⓪(MOVEQ #0,D0⓪(MOVE.B (A1),D0⓪ ⓪&diskok⓪(ADDQ.L #1,File.pos(A0)⓪(MOVE.B D0,File.lastch(A0)⓪(⓪(CMPI #2,File.accmode(A0) ; Binärmodus ?⓪(BLS valid ; ja-> kein EOL- und EOF-Test⓪(⓪(CMPI.B #13,D0⓪(BEQ eol⓪(CMPI.B #10,D0⓪(BNE ok0⓪(TST File.skipLF(A0)⓪(BEQ eol⓪(CLR File.skipLF(A0)⓪(BRA again⓪'eol⓪(MOVEQ #1,D0⓪(MOVE D0,File.eol(A0) ; lastch wird das EOL-Zeichen enthalten⓪(MOVE D0,File.state(A0)⓪(; CR & LF sind immer Separatoren⓪(TST.W 4(A7) ; inWord?⓪(BNE ende ; dann Ende⓪(BRA diskLoop ; sonst ignorieren⓪(⓪&(*⓪'doBS⓪(TST 6(A7)⓪(BEQ diskLoop⓪(SUBQ #1,6(A7)⓪(SUBQ #1,A1⓪(BRA diskLoop⓪&*)⓪(⓪'ok0⓪(TST File.chkeof(A0)⓪(BEQ valid ; Kein EOF-Test⓪(CMP.B File.eofchr(A0),D0⓪(BEQ nfeof⓪(⓪&valid⓪(LEA Separators,A2⓪(MOVE.W D0,D2⓪(LSR.W #3,D0⓪(BTST D2,0(A2,D0.W)⓪(BEQ isToken⓪(⓪(; Es ist ein Separator⓪(TST.W 4(A7) ; inWord?⓪(BNE endeOK ; dann Ende⓪(BRA diskLoop ; sonst ignorieren⓪(⓪&isToken:⓪(MOVE #1,4(A7) ; inWord:= TRUE⓪(ADDQ.L #1,A1 ; INC (destptr)⓪(ADDQ #1,6(A7) ; INC (index)⓪(BRA diskLoop⓪(⓪&(* alt:⓪(CMPI.B #8,D0 ; Backspace ?⓪(BEQ doBS⓪(ADDQ #1,6(A7) ; index⓪(ADDQ.L #1,A1⓪(LEA Separators,A2⓪(MOVE.W D0,D2⓪(LSR.W #3,D0⓪(BTST D2,0(A2,D0.W)⓪(BEQ diskLoop⓪(; Ende bei Ctrl-Zeichen⓪&*)⓪&endeOK:⓪(CLR File.state(A0)⓪&ende:⓪$END;⓪"END diskReadToken;⓪ ⓪ PROCEDURE unitReadToken;⓪"BEGIN⓪$ASSEMBLER⓪(; A1 nicht zerstören!⓪%loop⓪(MOVE 6(A7),D0⓪(CMP 8(A7),D0 ; index > HIGH (str)?⓪(BHI E0 ; dann ist String voll⓪(⓪(JSR Read0⓪(TST D1⓪(BEQ E0⓪(⓪(MOVEQ #0,D0⓪(MOVE.B (A1),D0⓪((*⓪*CMPI.B #8,D0⓪*BEQ DOBS⓪(*)⓪(LEA Separators,A2⓪(MOVE.W D0,D2⓪(LSR.W #3,D0⓪(BTST D2,0(A2,D0.W)⓪(BEQ isToken⓪(⓪(; Es ist ein Separator⓪(TST.W 4(A7) ; inWord?⓪(BNE E0 ; dann Ende⓪(BRA loop ; sonst ignorieren⓪(⓪&isToken:⓪(MOVE #1,4(A7) ; inWord:= TRUE⓪(ADDQ.L #1,A1⓪(ADDQ #1,6(A7)⓪(BRA loop⓪((*⓪(DOBS⓪*TST 6(A7)⓪*BEQ loop⓪*SUBQ.L #1,A1⓪*SUBQ #1,6(A7)⓪*BRA loop⓪(*)⓪%E0⓪$END⓪"END unitReadToken;⓪ ⓪ PROCEDURE ReadToken (f: File; VAR str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -10(A3),(A3)+⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ E1⓪(⓪(MOVE.W -(A3),-(A7) ; HIGH(str)⓪(MOVE.L -(A3),A1 ; str⓪(MOVE.L -(A3),A0 ; f⓪(⓪(TST File.eof(A0)⓪(BEQ noeof⓪(⓪(CLR.B (A1)⓪(MOVE #fEndOfFile,File.state(A0)⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(UNLK A5⓪(RTS⓪(⓪%E1 SUBQ.L #2,A3⓪(MOVE.L -(A3),A0⓪(CLR.B (A0)⓪(SUBQ.L #4,A3⓪(UNLK A5⓪(RTS⓪(⓪%noeof:⓪(CLR -(A7) ; index⓪(CLR -(A7) ; inWord⓪(⓪(TST File.getlast(A0)⓪(BEQ noLast⓪(JSR GetLast⓪(CLR D0⓪(MOVE.B (A1),D0⓪(LEA Separators,A2⓪(MOVE.W D0,D2⓪(LSR.W #3,D0⓪(BTST D2,0(A2,D0.W)⓪(BNE noLast ; war ein Begrenzer -> überlesen⓪(MOVE.W #1,(A7) ; inWord:= TRUE⓪(ADDQ.W #1,2(A7) ; INC (index)⓪(ADDQ.L #1,A1⓪%noLast:⓪ ⓪(TST File.ondisk(A0)⓪(BEQ isunit⓪(⓪(JSR diskReadToken⓪(BRA E0⓪(⓪%isunit⓪(JSR unitReadToken⓪(⓪%E0 ; String mit Null abschließen⓪(ADDQ.L #2,A7 ; inWord⓪(MOVE (A7)+,D0 ; index⓪(MOVE (A7)+,D1 ; HIGH⓪(CMP D1,D0⓪(BHI E2⓪(CLR.B (A1)⓪%E2 UNLK A5⓪$END⓪"END ReadToken;⓪ ⓪ PROCEDURE TermCH (f: File): CHAR;⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -4(A3),(A3)+⓪(JSR @CheckState⓪(CLR D0⓪(TST -(A3)⓪(BEQ E1⓪(MOVE.B File.lastch(A0),D0⓪%E1 MOVE.B D0,(A3)+⓪(ADDQ.L #1,A3⓪(UNLK A5⓪$END⓪"END TermCH;⓪ ⓪ PROCEDURE ReadLn (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.L -(A3),D0⓪(MOVE.L D0,A0⓪(BEQ EE⓪(CMPI #readSeqTxt,File.accmode(A0)⓪(BEQ T0⓪(MOVE #fBadOp,File.state(A0)⓪%EE JSR ErrHandler⓪(JSR ErrHdl2⓪(UNLK A5⓪(RTS⓪%T0 MOVE.L A0,(A3)+⓪(JSR EOF⓪(TST -(A3)⓪(BNE E0⓪(TST File.eol(A0)⓪(BNE T1⓪(MOVE.L A0,-(A7)⓪(MOVE.L A0,(A3)+⓪(CLR -(A7)⓪(MOVE.L A7,(A3)+⓪(JSR Read⓪(ADDQ.L #2,A7⓪(MOVE.L (A7)+,A0⓪(BRA T0⓪%T1 CLR File.eol(A0)⓪(CMPI.B #13,File.lastch(A0)⓪(SEQ D0⓪(ANDI #1,D0⓪(MOVE D0,File.skipLF(A0)⓪%E0 UNLK A5⓪$END⓪"END ReadLn;⓪ ⓪ ⓪ PROCEDURE write (f:File; start: ADDRESS; len: CARDINAL);⓪"BEGIN⓪$ASSEMBLER⓪(; A1: start, D1: len, f noch auf Heap⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ.L end⓪(⓪(MOVE File.accmode(A0),D0 ; CMPI #readOnly,File.accmode(A0)⓪(BEQ badAcc⓪(CMPI #readSeqTxt,D0⓪(BEQ badAcc⓪(⓪(TST File.ondisk(A0)⓪(BEQ isunit⓪(⓪(MOVE.L A0,-(A7)⓪(MOVE.L A1,-(A7) ; adr⓪(MOVE.L D1,-(A7) ; len⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$40,-(A7)⓪(TRAP #1⓪(ADDQ.L #4,A7⓪(MOVE.L (A7)+,D1⓪(ADDQ.L #4,A7⓪(MOVE.L (A7)+,A0⓪(MOVE #1,File.modified(A0)⓪(TST.L D0⓪(BPL ok⓪(MOVE D0,File.state(A0)⓪(BRA end⓪(⓪'badAcc:⓪(MOVE #fBadAccess,File.state(A0)⓪(MOVE.L A0,(A3)+⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(BRA end⓪(⓪'isunit:⓪(MOVE.L A0,-(A7)⓪(MOVE.L File.uhandle(A0),(A3)+⓪(MOVE.L A1,(A3)+ ; adr⓪(MOVE.L D1,-(A7)⓪(MOVE.L A7,(A3)+ ; len⓪(MOVE.L File.uwrite(A0),A0⓪(JSR (A0)⓪(ADDQ.L #4,A7⓪(MOVE.L (A7)+,A0⓪(MOVE -(A3),File.state(A0)⓪(BRA end⓪(⓪'ok:⓪(CMP.L D0,D1⓪(BLS ok2⓪(MOVE #fDiskFull,File.state(A0)⓪(BRA end⓪'ok2:⓪(CLR File.state(A0)⓪(ADD.L D1,File.pos(A0)⓪(MOVE.L File.pos(A0),D0⓪(CMP.L File.len(A0),D0⓪(BCS end⓪(MOVE.L D0,File.len(A0)⓪'end:⓪(UNLK A5⓪$END⓪"END write;⓪ ⓪ ⓪ PROCEDURE Write (f: File; ch: CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE -(A3),-(A7)⓪(MOVE.L A7,A1⓪(MOVEQ #1,D1⓪(JMP write⓪$END⓪"END Write;⓪ ⓪ PROCEDURE WriteLn (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE #$0D0A,-(A7)⓪(MOVE.L A7,A1⓪(MOVEQ #2,D1⓪(JMP write⓪$END⓪"END WriteLn;⓪ ⓪ PROCEDURE WritePg (f: File);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(MOVE.B #$0C,-(A7)⓪(MOVE.L A7,A1⓪(MOVEQ #1,D1⓪(JMP write⓪$END⓪"END WritePg;⓪ ⓪ PROCEDURE WriteString (f: File; REF str: ARRAY OF CHAR);⓪"BEGIN⓪$ASSEMBLER⓪(LINK A5,#0⓪(⓪(MOVE -(A3),D1⓪(MOVE.L -(A3),A1⓪(⓪(; A1: start, D1: len, f noch auf Heap⓪(JSR @CheckState⓪(TST -(A3)⓪(BEQ.L end⓪(⓪(MOVE File.accmode(A0),D0 ; CMPI #readOnly,File.accmode(A0)⓪(BEQ badAcc⓪(CMPI #readSeqTxt,D0⓪(BEQ badAcc⓪(⓪(TST File.ondisk(A0)⓪(BEQ isunit⓪(⓪(MOVE.L A0,-(A7)⓪(MOVE.L A1,-(A7) ; adr⓪(⓪(MOVE.L A1,D0⓪ l TST.B (A1)+⓪(DBEQ D1,l⓪(BNE c⓪(SUBQ.L #1,A1⓪ c MOVE.L A1,D1⓪(SUB.L D0,D1⓪(⓪(MOVE.L D1,-(A7) ; len⓪(MOVE File.handle(A0),-(A7)⓪(MOVE #$40,-(A7)⓪(TRAP #1⓪(ADDQ.L #4,A7⓪(MOVE.L (A7)+,D1⓪(ADDQ.L #4,A7⓪(MOVE.L (A7)+,A0⓪(MOVE #1,File.modified(A0)⓪(TST.L D0⓪(BPL ok⓪(MOVE D0,File.state(A0)⓪(BRA end⓪(⓪'badAcc:⓪(MOVE #fBadAccess,File.state(A0)⓪(MOVE.L A0,(A3)+⓪(JSR ErrHandler⓪(JSR ErrHdl2⓪(BRA end⓪(⓪'isunit:⓪(MOVE.L A0,-(A7)⓪(MOVE.L File.uhandle(A0),(A3)+⓪(MOVE.L A1,(A3)+ ; adr⓪(MOVE D1,(A3)+ ; HIGH⓪(MOVE.L File.uwrstr(A0),A0⓪(JSR (A0)⓪(MOVE.L (A7)+,A0⓪(MOVE -(A3),File.state(A0)⓪(BRA end⓪(⓪'ok:⓪(CMP.L D0,D1⓪(BLS ok2⓪(MOVE #fDiskFull,File.state(A0)⓪(BRA end⓪'ok2:⓪(CLR File.state(A0)⓪(ADD.L D1,File.pos(A0)⓪(MOVE.L File.pos(A0),D0⓪(CMP.L File.len(A0),D0⓪(BCS end⓪(MOVE.L D0,File.len(A0)⓪'end:⓪(UNLK A5⓪$END⓪"END WriteString;⓪ ⓪ END Text.⓪ ə
- (* $00006702$00002DF0$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFEC6A8D$FFFD5FA4$FFFD5FA4$FFF8E766$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFC35A0$FFF8E766$FFFC37CF$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4$FFFD5FA4Ç$00000966T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00007029$00000754$00000966$00005718$00005539$00005716$0000538E$00000754$0000070E$00000A74$00000754$00000966$0000001C$FFECF630$00007029$0000001CîÇâ*)
-